const express = require('express');
const app = express();
const joi = require('joi');

// 配置跨域cors中间件
const cors = require('cors');
app.use(cors());

// 配置解析表单数据中间件
app.use(express.urlencoded({extended:false}));
app.use(express.json());

// 封装res.cc函数
app.use((req,res,next) => {
  res.cc = function(err,status=0){
    res.send({
      status,
      msg:err instanceof Error ? err.message: err
    })
  }
  next();
});

// 解析Token的中间件
const expressJWT = require('express-jwt');
const config = require('./config');
// 以/api开头的路由不需要检测token
app.use(expressJWT({secret:config.secret}).unless({path:[/^\/api\/$/]}));

// 导入并使用用户路由模块
const userRouter = require('./router/user');
app.use('/api',userRouter);
// 导入并使用用户信息路由模块
const userInfoRouter = require('./router/userInfo');
app.use('/my',userInfoRouter);


// 定义错误级别中间件
app.use((err,req,res,next)=>{
  // 验证失败导致的错误
  console.log(err)
  if(err instanceof joi.ValidationError) return res.cc(err);
  // 身份认证失败
  if (err.name === 'UnauthorizedError') return res.cc('身份认证失败！')
  // 未知的错误
  res.cc(err)
});


// 端口
app.listen(3001,()=>{
  console.log('success');
});